/*
 * Hash.h
 *
 *  Created on: Oct 12, 2012
 *      Author: romina
 */

#ifndef HASH_H_
#define HASH_H_

#include <exception>
#include "../Exceptions/RecordNotFoundException.h"
#include "Tabla.h"
#include "Cubo.h"
#include "ManejadorDeCubo.h"
#include "../Comunes/Constantes.h"
#include "../Comunes/Palabra.h"
#include "../Comunes/Entidades/RecordFrase.h"

using namespace std;
using namespace palabra;

class Hash {
	ArchivoDeTexto * file_log;
	Tabla * file_tabla;
	ManejadorDeCubo * file_bloques;
	int calcular_dispersion(int clave);
	void overflow(RecordFrase record, Cubo cubo_overflow);
	void redispersar(Cubo &cubo_i, Cubo &cubo_f);
public:
	Hash(string path);
	void insertar_registro(RecordFrase record);
	RecordFrase obtener_registro(int clave);
	void modificar_registro(RecordFrase record);
	void borrar_registro(int clave);
	int get_cantidad_cubos();
	list<RecordFrase> get_frases_en_cubo(int id);
	void show();
	string toString();
	void download(string path);
	virtual ~Hash();
};

#endif /* HASH_H_ */
